﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace CIRDiagnoseDevice.Test
{
    class LbjTestCommand
    {
        CommunicationWithInterfaceUnit unit =new  CommunicationWithInterfaceUnit();
        # region 长龙Lbj测试命令
        /// <summary>
        /// 测试前先确保LBJ退出测试状态
        /// </summary>
        /// <param name="OSP">通信串口</param>
        /// <param name="manufature">设备生产商</param>
        public void MakeSureExite(SerialPort OSP, string manufature)
        {
            if (manufature == "深圳长龙")
            {
                QuitSingleTestCondition(OSP);
                unit.Delay(1000);
                QuitTestCondition(OSP);
                unit.Delay(800);
            }
            if (manufature == "上海通信")
            {
                QuitSingleTest(OSP);
                unit.Delay(1000);
                QuitTestCondition(OSP);
                unit.Delay(800);
            }
        }

        public void EnterTestCondition(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x0B);
            temp.Add(0x4A);
            temp.Add(0xFF);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        public void QuitTestCondition(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x0B);
            temp.Add(0x4A);
            temp.Add(0x00);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }
        /// <summary>
        /// 退出单项测试状态
        /// </summary>
        /// <param name="OSP"></param>
        public void QuitSingleTestCondition(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x0B);
            temp.Add(0x4A);
            temp.Add(0xF2);  // 退出单项测试状态
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        public void Enter866_1200Test(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02); //源端口为维护口地址
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x0B);
            temp.Add(0x4A);
            temp.Add(0xF1);
            temp.Add(0x06);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        public void Enter866_1800Test(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02); //源端口号，接Lbj维护口
            temp.Add(0x00); //源IP地址长度
            temp.Add(0x13); //目的端口号
            temp.Add(0x00); // 目的IP地址长度
            temp.Add(0x0B); //业务类型
            temp.Add(0x4A); // 命令
            temp.Add(0xF1); // 数据第一字节
            temp.Add(0x08); // 数据第二字节 发射1800Hz
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }
        /// <summary>
        /// // POCSAG码调制频偏测试
        /// </summary>
        /// <param name="OSP"></param>
        public void Enter821_POCTest(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x0B);
            temp.Add(0x4A);
            temp.Add(0xF1);
            temp.Add(0x04); // POCSAG码调制频偏测试
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        /// <summary>
        /// 调制限制测试
        /// </summary>
        /// <param name="OSP"></param>
        public void EnterOtherTransmitTest(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x0B);
            temp.Add(0x4A);
            temp.Add(0xF1);
            temp.Add(0x0A); // 打开发射机外部音频通道
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }
        /// <summary>
        /// 打开接收机外部音频通道
        /// </summary>
        /// <param name="OSP"></param>
        public void EnterOtherReceiveTest(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x0B);
            temp.Add(0x4A);
            temp.Add(0xF1);
            temp.Add(0x0C);  // 打开接收机外部音频通道
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        # endregion

        # region 上海通信Lbj测试命令

        public void ConnectLbj(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x0B);
            temp.Add(0x03);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        public void EnterSHTestCondition(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x01);
            temp.Add(0x07);
            temp.Add(0xFF);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        /// <summary>
        /// 测试载波容差、发射功率、调制灵敏度、调制失真、调制限制
        /// </summary>
        /// <param name="OSP"></param>
        public void TestTranPowerAndCarrierTolerance(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x01);
            temp.Add(0x07);
            temp.Add(0xF1);
            temp.Add(0x05);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        /// <summary>
        /// 调制频偏测试
        /// </summary>
        /// <param name="OSP"></param>
        public void ModFreqDeviationTest(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x01);
            temp.Add(0x07);
            temp.Add(0xF1);
            temp.Add(0x06);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        public void Test821TranPower(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x01);
            temp.Add(0x07);
            temp.Add(0xF1);
            temp.Add(0x03);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        public void TestPOCModFreqDiviation(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x01);
            temp.Add(0x07);
            temp.Add(0xF1);
            temp.Add(0x04);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        public void ReceiveVolDistortion(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x01);
            temp.Add(0x07);
            temp.Add(0xF1);
            temp.Add(0x01);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        /// <summary>
        /// 上海通信退出单项测试状态命令
        /// </summary>
        /// <param name="OSP"></param>
        public void QuitSingleTest(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x01);
            temp.Add(0x07);
            temp.Add(0xF2);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        public void QuitTest(SerialPort OSP)
        {
            List<byte> temp = new List<byte>();
            temp.Add(0x02);
            temp.Add(0x00);
            temp.Add(0x13);
            temp.Add(0x00);
            temp.Add(0x01);
            temp.Add(0x07);
            temp.Add(0x00);
            byte[] sendData = unit.PacketData(temp.ToArray());
            if (OSP.IsOpen)
            {
                OSP.Write(sendData, 0, sendData.Length);
            }
            else
            {
                MessageBox.Show("与Lbj通信串口未打开！");
            }
        }

        # endregion
    }
}
